package com.personnel.controller;

import com.personnel.common.Result;
import com.personnel.pojo.Staff;
import com.personnel.service.StaffService;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 员工基本信息表(Staff)表控制层
 *
 * @author yuepeng
 * @since 2021-12-28 13:55:41
 * @version 1.0
 */
@RestController
@RequestMapping("/staff")
public class StaffController {

    /**
     * 服务对象
     */
    @Resource
    private StaffService staffService;

    /**
     * 通过主键查询单条数据
     * @param index  需要查询的页码
     * @param staffName  模糊查询的内容
     * @return 单条数据
     */
    @GetMapping(value = "/selectForPage")
    /*
     * 返回类型说明：
     * 因为LaiUi数据表格接收数据有固定格式，而返回json数据嵌套，所以这里使用Map返回比较简单快捷，不需要再使用LaiUi的回调函数
     */
    public Map<String, Object> selectForPage(@RequestParam(name = "page") int index,int limit, String staffName, Integer departmentId, String category) {
        return this.staffService.selectForPage(index, limit, staffName, departmentId, category);
    }

    /**
     * 查询所有数据
     * @return 返回所有数据
     */
    @GetMapping(value = "/selectAll")
    public Result selectAll() {
        return this.staffService.selectAll();
    }
    
    /**
     * 通过主键删除单条数据
     *
     * @param staffId 主键
     * @return 单条数据
     */
    @PostMapping(value = "/deleteById")
    public Map<String, Object> deleteById(@RequestParam("staffId") String staffId) {
        return this.staffService.deleteById(staffId);
    }
    
    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @GetMapping(value = "/selectById")
    public Map<String, Object> selectById(String id) {
        return this.staffService.selectById(id);
    }
    
    /**
     * 通过主键更新单条数据
     *
     * @param staff 一个数据库对应的POJO数据对象
     * @return 单条数据
     */
    @PostMapping(value = "/updateById")
    public Result updateById(@RequestBody  Staff staff) {
        return this.staffService.updateById(staff);
    }

    /**
     * 通过主键更新单条数据
     *
     * @param staff 一个数据库对应的POJO数据对象
     * @return 单条数据
     */
    @PostMapping(value = "/updateSettingById")
    public Result updateSettingById(@RequestBody  Staff staff, HttpSession session) {
        return this.staffService.updateSettingById(staff,session);
    }

    /**
     * 通过主键更新单条数据
     *
     * @return 单条数据
     */
    @PostMapping(value = "/updatePasswordById")
    public Map<String, Object> updatePasswordById(String oldPassword,String newPassword,String staffId) {
        return this.staffService.updatePasswordById(oldPassword,newPassword,staffId);
    }
    /**
     * 通过主键更新单条数据
     *
     * @return 单条数据
     */
    @PostMapping(value = "/updatePasswordByUuid")
    public Map<String, Object> updatePasswordByUuid(String uuid,String newPassword) {
        return this.staffService.updatePasswordByUuid(uuid,newPassword);
    }


    /**
     * 通过一个pojo对象新增单条数据
     *
     * @param staff 一个数据库对应的POJO数据对象
     * @return 返回插入的主键id
     */
    @PostMapping(value = "/insert")
    public Result insert(@RequestBody Staff staff) {
        return this.staffService.insert(staff);
    }

    @PostMapping(value = "/uploadHeadImg")
    public Map<String, Object> upload(MultipartFile file, HttpServletRequest request) throws IOException {
        return this.staffService.upload(file, request);
    }

    @PostMapping(value = "/insertHeadImg")
    public Map<String, Object> insertPhoto(MultipartFile file, HttpServletRequest request) throws IOException {
        return this.staffService.insertHeadImg(file, request);
    }

    /**
     * 主页面圆型图数据
     * @return
     */
    @GetMapping("selectForDepartment")
    @ResponseBody
    public Map<String,Object> selectForDepartment() {
        List<Staff> staff = this.staffService.selectForDepartment();
        HashMap<String, Object> map = new HashMap<>();
        map.put("data",staff);
        System.out.println("======"+map);
        return map;
    }

    @RequestMapping(value = "/deleteByIds", method = RequestMethod.POST)
    public Map<String, Object> deleteByIds(@RequestParam("ids") String ids) {
        return this.staffService.deleteByIds(ids);
    }
}